﻿using System;
using System.Reflection;
using OrganizationName.Factory;
using System.Collections.Generic;
namespace OrganizationName.CodeGeneration
{
    public interface ICodeContext
    {
        void AddReference(System.Reflection.Assembly assemblyToReference);
        void AddReference(System.Type typeToReference);
        System.CodeDom.CodeTypeDeclaration Class { get; }
        ICodeProvider CodeProvider { get; }
        System.Reflection.Assembly Compile();
        System.CodeDom.CodeCompileUnit CompileUnit { get; }
        ICodeContext CreateChild(ICodeProvider codeProvider);
        ICodeContext CreateChild(ICodeProvider codeProvider, bool isStatementContainer);
        System.Collections.Generic.Dictionary<string, System.Type> DynamicallyLoadedTypes { get; }
        string FullPath { get; }
        bool IsRootContext { get; }
        System.CodeDom.CodeNamespace NameSpace { get; }
        ICodeContext ParentContext { get; }
        ICodeProvider RootCodeProvider { get; }
        ICodeContext RootContext { get; }
        System.CodeDom.CodeStatementCollection Statements { get; }
        SortedList<string, Assembly> LoadedAssemblies { get; }
    }
}
